/*
 * Copyright 2008-2023 dexian.vip. All rights reserved.
 * Support: http://www.dexian.vip
 * License: http://www.dexian.vip/license
 */

package vip.dexian.common.query;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.StringUtils;

import java.io.Serial;
import java.io.Serializable;

/**
 * 排序条件
 *
 * @author 挺好的 2023年05月30日 16:24
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode (callSuper = false)
public class Order implements Serializable {

    @Serial
    private static final long serialVersionUID = 8271828973136591296L;

    /**
     * 排序方向
     */
    public enum Direction {

        /**
         * 升序
         */
        ASC,

        /**
         * 降序
         */
        DESC
    }

    /**
     * 属性名称
     */
    private String property;

    /**
     * 排序方向
     */
    private Direction direction;

    /**
     * 是否是有效的排序
     *
     * @return property == null || direction == null 返回false。
     */
    public boolean isValid () {
        return StringUtils.isNotEmpty(this.property) && this.direction != null;
    }

    /**
     * 根据指定属性升序
     *
     * @param property
     *         属性名称
     *
     * @return 升序对象
     */
    public static Order asc (String property) {
        return new Order(property, Direction.ASC);
    }

    /**
     * 根据指定属性降序
     *
     * @param property
     *         属性名称
     *
     * @return 降序对象
     */
    public static Order desc (String property) {
        return new Order(property, Direction.DESC);
    }
}
